/**
 * <h3>CampusNewsMapper</h3>
 * <p> 接口名：CampusNewsMapper</p>
 *
 * <h3>功能描述</h3>
 * <p> 校园新闻信息的数据访问层接口，定义了对校园新闻表的增删改查操作方法。</p>
 * <p> 该接口继承自 MyBatis Plus 的 BaseMapper，扩展了基于业务需求的自定义查询方法。</p>
 *
 * <h3>元数据</h3>
 * <ul>
 *    <li> 作者：郭强 </li>
 *    <li> 创建日期：2025年05月20日 21:22:53 </li>
 * </ul>
 *
 * <h3>其他信息</h3>
 * <ul>
 *    <li> 示例代码：{@code @Autowired private CampusNewsMapper campusNewsMapper;}</li>
 * </ul>
 *
 * @implSpec 实现了 MyBatis Plus 的 {@link BaseMapper} 接口，并扩展了校园新闻相关的业务方法。
 * @since 1.0.0
 */
package com.dnndo.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dnndo.system.domain.CampusNews;
import com.dnndo.system.domain.dto.CampusNewsDTO;
import com.dnndo.system.domain.dto.NewsDTO;
import com.dnndo.system.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 校园新闻数据访问层接口
 */
@Mapper
public interface CampusNewsMapper extends BaseMapper<CampusNewsDTO> {

    /**
     * 查询所有或符合条件的校园新闻列表（管理员）
     *
     * 逻辑说明：
     * 1. 管理员可查询所有新闻，支持多条件筛选。
     *
     * @param dto 查询条件对象
     * @return List<CampusNews> 校园新闻信息列表
     */
    List<CampusNews> selectCampusNewsList(CampusNewsDTO dto);

    /**
     * 查询本校校园新闻列表（学校/普通用户）
     *
     * 逻辑说明：
     * 1. 学校/普通用户仅能查询本校新闻。
     *
     * @param dto 查询条件对象，需包含学校ID
     * @return List<CampusNews> 校园新闻信息列表
     */
    List<CampusNews> selectCampusNewsListSchool(CampusNewsDTO dto);

    /**
     * 根据新闻ID查询校园新闻详细信息
     *
     * 逻辑说明：
     * 1. 根据newsId查询新闻详情。
     *
     * @param newsId 新闻唯一标识符
     * @return CampusNewsDTO 新闻详情
     */
    CampusNewsDTO selectCampusNewsById(Integer newsId);

    /**
     * 根据新闻ID更新校园新闻信息
     *
     * 逻辑说明：
     * 1. 根据newsId更新新闻内容。
     *
     * @param campusNews 更新数据对象
     * @return int 受影响的记录数
     */
    int updateCampusNewsById(CampusNewsDTO campusNews);

    /**
     * 新增一条校园新闻记录
     *
     * 逻辑说明：
     * 1. 插入一条新的新闻记录。
     *
     * @param campusNews 新增数据对象
     * @return int 受影响的记录数
     */
    int insertCampusNews(CampusNewsDTO campusNews);

    /**
     * 根据新闻ID删除校园新闻记录
     *
     * 逻辑说明：
     * 1. 根据newsId删除对应新闻。
     *
     * @param newsId 新闻唯一标识符
     * @return int 受影响的记录数
     */
    int deleteCampusNewsById(Integer newsId);

    /**
     * 根据新闻id获取新闻的详细信息（中文）
     *
     * 逻辑说明：
     * 1. 查询指定新闻ID的中文详情。
     *
     * @param newsId 新闻ID
     * @return CampusNewsInfoVOZH 新闻详情（中文）
     */
    CampusNewsInfoVOZH selectCampusNewsByIdListZh(Integer newsId);

    /**
     * 查询最新的其他新闻列表（中文）
     *
     * 逻辑说明：
     * 1. 查询最新的其他新闻（中文）。
     *
     * @return List<CampusNewsInfoVOZHOtherNewsVOZH> 其他新闻列表
     */
    List<CampusNewsInfoVOZHOtherNewsVOZH> selectCampusNewsByIdCreatedAtZh(Integer newsId);

    /**
     * 根据新闻id获取新闻的详细信息（英文）
     *
     * 逻辑说明：
     * 1. 查询指定新闻ID的英文详情。
     *
     * @param newsId 新闻ID
     * @return CampusNewsInfoVOEN 新闻详情（英文）
     */
    CampusNewsInfoVOEN selectCampusNewsByIdListEn(Integer newsId);

    /**
     * 查询最新的其他新闻列表（英文）
     *
     * 逻辑说明：
     * 1. 查询最新的其他新闻（英文）。
     *
     * @return List<CampusNewsInfoVOZHOtherNewsVOEN> 其他新闻列表
     */
    List<CampusNewsInfoVOZHOtherNewsVOEN> selectCampusNewsByIdCreatedAtEn(Integer newsId);

    /**
     * 查询校园新闻列表（中文）
     *
     * 逻辑说明：
     * 1. 查询所有中文新闻列表。
     *
     * @param dto 查询参数
     * @return List<NewsVOZH> 新闻列表（中文）
     */
    List<NewsVOZH> news(NewsDTO dto);

    /**
     * 查询校园新闻列表（英文）
     *
     * 逻辑说明：
     * 1. 查询所有英文新闻列表。
     *
     * @param dto 查询参数
     * @return List<NewsVOEN> 新闻列表（英文）
     */
    List<NewsVOEN> newsEn(NewsDTO dto);

    /**
     * 查询校园新闻总数
     *
     * 逻辑说明：
     * 1. 统计符合条件的新闻总数。
     *
     * @param dto 查询参数
     * @return int 新闻总数
     */
    int countCampusNews(NewsDTO dto);

}
